perm filename 11STNK.17[KL,SYS] blob
sn#209172 filedate 1976-04-03 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00012 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE 11STNK - STINKING ODOR OF PDP11'S
C00004 00003
C00009 00004
C00011 00005
C00014 00006
C00016 00007
C00019 00008
C00021 00009
C00025 00010
C00027 00011
C00029 00012
C00030 ENDMK
C⊗;
TITLE 11STNK - STINKING ODOR OF PDP11'S
.MLLIT==1
A=1
B=2
C=3
D=4
E=5
T=6
TT=7
H=10
I=11
J=12
Q=13
W=14
P=17
DLB==60
DLC==64
PAG==10
SWPUA=701540,,
11CORL==28.*1024. ;# WORDS OF PDP11 CORE
INCH==1
OUCH==2
TYIC==3
TYOC==4
ERRCH==5
OPENI: SETZ
SIXBIT/OPEN/
[.UII,,INCH]
0(Q)
2(Q)
3(Q)
SETZ 1(Q)
OPENO: SETZ
SIXBIT/OPEN/
[.BIO,,OUCH]
0(Q)
2(Q)
3(Q)
SETZ 1(Q)
;FILE NAME BLOCKS. CONTAIN INITIAL DEFAULTS
;DEV SNM FN1 FN2
RUGFN: SIXBIT/DSK/
SIXBIT/./
SIXBIT/KLRUG/
SIXBIT/BIN/
DDTFN: SIXBIT/DSK/
SIXBIT/./
SIXBIT/11DDT/
SIXBIT/16K/
PRGFN: SIXBIT/DSK/
0
SIXBIT/IOELEV/
SIXBIT/BIN/
DMPFN: SIXBIT/DSK/
0
SIXBIT/FOO/
SIXBIT/BIN/
LPDL==50
PDL: -LPDL,,.
BLOCK LPDL
;COMMAND TABLE
;1ST WD - SIXBIT NAME OF COMMAND (FIRST LETTER MUST BE UNIQUE)
;2ND WD - (LH) 0 IF NO FILE NAME ELSE POINTER TO FILE NAME BLOCK
; - (RH) DISPATCH ADDRESS
;3RD WD - POINTS TO ASCIZ HELP STRING
COMTAB: SIXBIT/RUG/ ? RUGFN,,RUGLD ? [ASCIZ/LOAD RUG/]
SIXBIT/DDT/ ? DDTFN,,DDTLD ? [ASCIZ/LOAD 11DDT/]
SIXBIT/LOAD/ ? PRGFN,,PRGLD ? [ASCIZ/LOAD A PROGRAM/]
SIXBIT/MAP/ ? 0,,MAP ? [ASCIZ/PRINT CORE MAP/]
SIXBIT/ADUMP/ ? DMPFN,,ADUMP ? [ASCIZ/DUMP IN PALX BIN FORMAT/]
SIXBIT/BDUMP/ ? DMPFN,,BDUMP ? [ASCIZ/DUMP IN KLDCP BIN FORMAT/]
SIXBIT/TDUMP/ ? DMPFN,,TDUMP ? [ASCIZ/DUMP AS DL10 BOOTSTRAP PROGRAM/]
SIXBIT/HELP/ ? 0,,HELP ? [ASCIZ/ /]
SIXBIT/?/ ? 0,,HELP ? [ASCIZ/ /]
LCMTAB==.-COMTAB
HELP: PUSHJ P,CRLF
MOVE A,[-LCMTAB/3,,COMTAB]
HELP1: MOVE TT,(A)
PUSHJ P,SIXOUT
MOVEI TT,[ASCIZ/ (FILENAME)/]
MOVE T,1(A)
TLNE T,-1
PUSHJ P,ASCOUT
MOVEI TT,[ASCIZ/ - /]
PUSHJ P,ASCOUT
MOVE TT,2(A)
PUSHJ P,ASCOUT
PUSHJ P,CRLF
ADDI A,2
AOBJN A,HELP1
POPJ P,
;SIXBIT OUTPUT FROM TT
SIXOUT: MOVEI T,0
LSHC T,6
ADDI T,40
.IOT TYOC,T
JUMPN TT,SIXOUT
CPOPJ: POPJ P,
CRLF: MOVEI TT,[ASCIZ/
/]
;ASCIZ OUTPUT FROM TT
ASCOUT: HRLI TT,440700
ASCOU1: ILDB T,TT
JUMPE T,CPOPJ
.IOT TYOC,T
JRST ASCOU1
;OCTAL OUTPUT FROM T
OCTOUT: IDIVI T,8
HRLM TT,(P)
SKIPE T
PUSHJ P,OCTOUT
HLRZ TT,(P)
ADDI TT,"0
.IOT TYOC,TT
POPJ P,
;READ SYLLABLE FROM TTY
;RETURN SIXBIT IN TT, DELIMITER IN A
GETSYL: MOVEI TT,0
MOVE T,[440600,,TT]
GETSY1: .IOT TYIC,A
CAIE A,↑G
CAIN A,177
JRST CMDER ;RUBOUT - ERR BACK TO COMMAND LEVEL
CAIE A,":
CAIN A,";
POPJ P,
CAIG A,40
POPJ P,
CAIGE A,140
SUBI A,40
TLNE T,770000
IDPB A,T
JRST GETSY1
;FILE NAME READER
;CALL WITH Q -> FILE NAME BLOCK.
;SUPPORTS ALTMODE, ↑X, ↑Y
FNR: MOVEI TT,[ASCIZ/ (FILENAME) /]
PUSHJ P,ASCOUT
SKIPN 1(Q)
.SUSET [.RSNAM,,A]
SKIPN 1(Q)
MOVEM A,1(Q)
FNR0: SETZB B,C ;B,C,D,E = DEV,SNM,FN1,FN2
SETZB D,E
FNR1: PUSHJ P,GETSYL
JUMPE TT,FNR2
CAIN A,":
JRST [ MOVEM TT,B ? JRST FNR2 ]
CAIN A,";
JRST [ MOVEM TT,C ? JRST FNR2 ]
FNR1A: SKIPE D
SKIPA E,TT
MOVE D,TT
FNR2: CAIL A,40
JRST FNR1
CAIE A,33
JRST FNR3
PUSHJ P,FNRST ;ALTMODE, SHOW CURRENT NAME
PUSHJ P,CRLF
PUSHJ P,FNRALT
JRST FNR0
FNRALT: IRPC ZZ,,[:;X ]
MOVE TT,.IRPCNT(Q)
PUSHJ P,SIXOUT
IFSE [ZZ]X,.IOT TYOC,[40]
.ELSE [ MOVEI TT,[ASCIZ/ZZ /] ? PUSHJ P,ASCOUT ]
TERMIN
FNR3: CAIE A,↑X
JRST FNR4
MOVE TT,2(Q)
MOVEI A,40
JRST FNR1A
FNR4: CAIE A,↑Y
JRST FNRST
MOVE TT,3(Q)
MOVEI A,40
JRST FNR1A
FNRST: REPEAT 4,[
SKIPE B+.RPCNT
MOVEM B+.RPCNT,.RPCNT(Q)
] POPJ P,
GO: MOVE P,PDL
.OPEN TYIC,[.UAI,,'TTY]
.VALUE
.OPEN TYOC,[.UAO,,'TTY]
.VALUE
MOVE TT,[.FNAM1]
PUSHJ P,SIXOUT
.IOT TYOC,[".]
MOVE TT,[.FNAM2]
PUSHJ P,SIXOUT
PUSHJ P,CRLF
MOVSI A,-1 ;LH -1 IF LOC NOT STORED INTO
MOVEM A,11CORE
MOVE A,[11CORE,,11CORE+1]
BLT A,11CORE+11CORL-1
CMD: MOVE P,PDL
.IOT TYOC,["*]
.IOT TYIC,A
CAIGE A,40
JRST CMDER
CAIGE A,140
SUBI A,40
ANDI A,77
MOVE B,[-LCMTAB/3,,COMTAB]
CMD1: LDB T,[360600,,(B)]
CAMN T,A
JRST CMD2
ADDI B,2
AOBJN B,CMD1
CMDER: MOVEI TT,[ASCIZ/???
/]
PUSHJ P,ASCOUT
JRST CMD
CMD2: MOVE TT,(B) ;COMPLETE THE COMMAND NAME
LSH TT,6
PUSHJ P,SIXOUT
HLRZ Q,1(B) ;GET FILE NAME ARG IF NECC
HRRZ H,1(B)
JUMPE Q,CMD3
PUSHJ P,FNR
CMD3: PUSHJ P,(H)
JRST CMD
FSERR: .OPEN ERRCH,[.UAI,,'ERR ? 1 ? 0]
.VALUE
FSERR1: .IOT ERRCH,A
JUMPL A,FSERR2
CAIGE A,40
JRST FSERR2
.IOT TYOC,A
JRST FSERR1
FSERR2: MOVEI TT,[ASCIZ/ - /]
PUSHJ P,ASCOUT
PUSHJ P,FNRALT
PUSHJ P,CRLF
JRST CMD
DDTLD: SETZM RUGFLG
.CALL OPENI ;LOAD 11DDT
JRST FSERR
PUSHJ P,ALOAD
MOVEM W,RUGSA
LSH W,-1
MOVEI A,11CORE-2(W) ;-> WORD IN WHICH TO STORE START ADDRESS
MOVEM A,SASTOR
MOVEI A,11CORE-1(W) ;-> WORD TO CONTAIN LOWEST -11 ADDR OF SYMBOL TABLE
MOVEM A,O.SYME
MOVE A,(A) ;SET UP CURRENT CONTENTS
LSH A,-1
MOVEM A,RUGSYM
MOVEI A,-2(W) ;-11 ADDR/2 OF HIGHEST SYMBOL TABLE LOC
JRST RUGLD1 ;FROM HERE ON WORKS LIKE RUG
RUGLD: SETOM RUGFLG
.CALL OPENI ;LOAD RUG
JRST FSERR
PUSHJ P,ALOAD
LSH W,-1 ;START ADDR OF RUG -> VECTOR OF MAGIC CRUFT
MOVE A,11CORE(W) ;FIRST WORD IS READ START ADDR (O.ODT)
MOVEM A,RUGSA
SETZM SASTOR ;RUG DOESN'T KNOW ABOUT PROG START ADDR
MOVEI A,11CORE+2(W) ;-> WORD TO CONTAIN LOWEST -11 ADDR OF SYMBOL TABLE
MOVEM A,O.SYME
MOVE A,11CORE+2(W) ;THIRD WORD IS POINTER TO LOWEST SYMBOL TABLE LOC
LSH A,-1
MOVEM A,RUGSYM
MOVE A,11CORE+1(W) ;SECOND WORD -> HIGH SYMBOL TABLE LOC
LSH A,-1
RUGLD1: SUB A,RUGSYM ;A := # WORDS OF SYMBOL TABLE
IDIVI A,16.*3+2 ;A := # BLOCKS, B := # WORDS IN LAST BLOCK
JUMPE B,G0001
MOVE A,RUGSYM
ADD A,B ;A := WORD ADDR OF TOP OF BLOCK
SUBI A,2
MOVEM A,FLGPNT
SUBI B,2
IDIVI B,3 ;B := # SYMBOLS ALREADY USED IN BLOCK
SUBI B,16.
G0001: MOVNM B,SYMCNT ;SET # OF SYMBOLS YET TO GO
MOVE A,@O.SYME
MOVEM A,SYMLO ;INITIAL LOW SYMBOL ADDR (FOR MAP)
.CLOSE INCH,
MOVE A,PRGHI
MOVEM A,RUGHI
SETZM PRGHI
POPJ P,
PRGLD: .CALL OPENI ;LOAD IOELEVEN
JRST FSERR
PUSHJ P,ALOAD
MOVEM W,SADR ;STORE START ADDR INTO 10
MOVEM W,@SASTOR ;STORE START ADDR INTO 11
PUSHJ P,SLOAD ;LOAD SYMBOLS INTO CORE IMAGE FOR RUG
.CLOSE INCH,
POPJ P,
;CORE LOADER
ALOAD: .IOT INCH,A ;SEARCH FOR START OF BLOCK
JUMPE A,ALOAD ;SKIPPING "BLANK TAPE"
CAIE A,1
.VALUE ;UNKNOWN BLOCK TYPE
.IOT INCH,A ;SECOND BYTE OF HEADER ALWAYS 0
SKIPE A
.VALUE
PUSHJ P,RWORD ;BYTE COUNT + 6
HRREI Q,-6(W)
PUSHJ P,RWORD ;LOAD ADDRESS
JUMPLE Q,JBLK
LD1: .IOT INCH,A ;BYTE TO BE LOADED
TDNE A,[-400]
.VALUE
CAIL W,11CORL*2
.VALUE
CAMLE W,PRGHI
MOVEM W,PRGHI
MOVEI J,2*11CORE(W) ;FIGURE OUT WHERE IT GOES
ROT J,-1
SKIPL J
TLOA J,001000
HRLI J,101000
DPB A,J
HRRZS @J ;MARK THIS WORD AS STORED INTO
ADDI W,1
SOJG Q,LD1
.IOT INCH,A ;IGNORE CHECKSUM
JRST ALOAD
JBLK: .IOT INCH,A ;GOBBLE CHECKSUM
JUMPE Q,CPOPJ ;RETURN FROM ALOAD WITH START ADDR IN W
.VALUE ;BLOCK LENGTH < 6 ?
RWORD: .IOT INCH,W ;FORM TWO BYTES INTO A WORD
TDNE W,[-400]
.VALUE
.IOT INCH,A
TDNE A,[-400]
.VALUE
LSH A,8
IOR W,A
POPJ P,
;SYMBOL LOADER
SBTB: 440600,,A ;SIXBIT BYTE POINTER TO A
RAD50: MOVE Q,SBTB
PUSHJ P,LOOP50
HRRZM E,11CORE-3(B)
PUSHJ P,LOOP50
HRRZM E,11CORE-2(B)
POPJ P,
LOOP50: MOVEI E,0
MOVEI D,3
LOP50: ILDB C,Q
PUSHJ P,CNVT
IMULI E,50
ADD E,C
SOJG D,LOP50
POPJ P,
CNVT: CAIL C,41
CAILE C,72
JRST NOTLET
SUBI C,40
POPJ P,
NOTLET: CAIN C,4
JRST DOLR
CAIN C,5
JRST PRCNT
CAIN C,16
JRST PERD
CAIG C,31
CAIGE C,20
JRST NOTNUM
ADDI C,16
POPJ P,
NOTNUM: MOVEI C,0
POPJ P,
DOLR: MOVEI C,33
POPJ P,
PERD: MOVEI C,34
POPJ P,
PRCNT: MOVEI C,35
POPJ P,
SLOAD: .IOT INCH,A ;LOAD SYMBOLS
JUMPE A,SLOAD ;SKIP BLANK TAPE
CAIE A,2
.VALUE ;NOT SYMBOLS BLOCK
MOVE B,RUGSYM ;LOAD SYMBOLS AT -3(B),-2(B),-1(B)
MOVE H,SYMCNT ;# SYMBOLS YET TO GO IN THIS BLOCK
MOVE A,FLGPNT
HRLZ I,11CORE+1(A) ;PICK UP REGISTER FLAGS WORD
HRR I,11CORE(A) ;PICK UP HALF-KILL FLAGS WORD
JUMPN H,SLOAD1
SLOAD0: MOVEI H,16. ;NEW BLOCK
MOVE B,RUGSYM
SUBI B,2
MOVEM B,RUGSYM
MOVEM B,FLGPNT
SETZB I,11CORE(B)
SETZM 11CORE+1(B)
SLOAD1: .IOT INCH,A
JUMPE A,SLOADE
AOJE A,SLOADE
SOS A
PUSHJ P,RAD50 ;DEPOSIT 2 -11 WORDS OF RADIX 50 FOR THIS SIXBIT
.IOT INCH,A ;GET FLAGS AND VALUE
HRRZM A,11CORE-1(B) ;STORE VALUE
MOVEI D,100000
MOVNI E,-1(H) ;E IS 0 FOR LOWEST SYM IN BLOCK, -15. FOR HIGHEST
LSH D,(E) ;POINT TO RIGHT BIT IN FLAG
TLNE A,4000
TLO I,(D) ;2ND FLAG WORD
TLNE A,20000
TRO I,(D) ;1ST FLAG WORD
SUBI B,3
SOJG H,SLOAD1
MOVE A,FLGPNT ;BLOCK DONE, FILL OUT
HLRZM I,11CORE+1(A)
HRRZM I,11CORE(A)
MOVEM B,RUGSYM
JRST SLOAD0 ;START NEXT BLOCK
SLOADE: MOVE A,FLGPNT ;FINISH LAST BLOCK
HLRZM I,11CORE+1(A)
HRRZM I,11CORE(A)
MOVEM B,RUGSYM
LSH B,1
MOVEM B,@O.SYME ;TELL RUG WHERE SYMBOL TABLE ENDS
MOVEM B,SYMLO
POPJ P,
RUGSYM: 0 ;WORD ADDR OF LOWEST LOC IN RUG SYMBOL TABLE
FLGPNT: 0 ;WORD ADDR OF FLAG PAIR FOR CURRENT SYM BLOCK
SYMCNT: 0 ;NUMBER OF SYMBOLS NOT YET GENERATED INTO CURRENT BLOCK
O.SYME: 0 ;-> WORD IN -11 CORE IMAGE WHICH CONTAINS LOWEST
;-11 ADDR USED BY SYMBOL TABLE
RUGFLG: 0 ;-1 RUG, 0 11DDT
SASTOR: 0 ;-> WORD IN -11 CORE IMAGE WHERE START ADDRESS IS STORED
PRGHI: 0 ;HIGHEST LOC LOADED
SYMLO: 0 ;LOWEST LOC LOADED WITH SYMBOLS
RUGSA: 0 ;START ADDR OF RUG/DDT (ALSO ASSUMED TO BE LOWEST LOC)
RUGHI: 0 ;HIGHEST LOC LOADED WITH RUG/DDT
MAP: PUSHJ P,CRLF
IRP WD,,[PRGHI,SYMLO,RUGSA,RUGHI,SADR]NM,,[HIGHEST PROGRAM LOC,LOWEST SYMBOL LOC,START ADDRESS OF DEBUGGER,HIGHEST DEBUGGER LOC,PROGRAM START ADDRESS]
MOVEI TT,[ASCIZ/NM=/]
PUSHJ P,ASCOUT
MOVE T,WD
PUSHJ P,OCTOUT
PUSHJ P,CRLF
TERMIN
POPJ P,
;DUMP OUT AS PDP11 ABSOLUTE BINARY
;ADUMP DUMPS ONE BYTE PER WORD, LIKE PALX
;BDUMP DUMPS FOUR BYTES PER WORD, ARRANGED IN A WAY TO CORRESPOND
;TO THE RH11. THIS FOR KLDCP '.BIN' FILES.
;I IS BYTE# FOR BDUMP, J IS BUFFER, Q IS CHECKSUM, W IS -11 ADDR
BDMPNT: 221000,,J
321000,,J
001000,,J
101000,,J
ADMPNT: 001000,,J
PUTB: 0 ;APUTB OR BPUTB
APUTB: DPB A,ADMPNT
ADD Q,A
APUTW: HRROI TT,J
.IOT OUCH,TT
APUTW1: MOVSI I,-4
MOVEI J,0
POPJ P,
BPUTB: DPB A,BDMPNT(I)
ADD Q,A
AOBJP I,APUTW
POPJ P,
ADUMP: SKIPA TT,[APUTB]
BDUMP: MOVEI TT,BPUTB
MOVEM TT,PUTB
.CALL OPENO
JRST FSERR
PUSHJ P,APUTW1
MOVSI W,-11CORL
ADUMP1: SKIPGE 11CORE(W) ;SEARCH FOR WORD THAT'S BEEN LOADED
AOBJN W,ADUMP1
JUMPGE W,DUMPJB ;ALL CORE DUMPED, DO JUMP BLOCK
MOVEI H,(W) ;H := PDP11 ADDR OF FIRST WORD
LSH H,1
HRLI W,-30 ;MAX BLOCK LENGTH; SCAN FOR WORD NOT LOADED
ADUMP2: SKIPL 11CORE(W)
AOBJN W,ADUMP2
JUMPGE W,ADUMP4 ;BLOCK MAX SIZE
SKIPL 11CORE+1(W)
AOBJN W,ADUMP2 ;NOT TWO ZEROES IN A ROW
ADUMP4: MOVEI E,(W) ;NEXT LOCATION TO LOOK AT IS SAVED IN E
MOVEI Q,0 ;INIT CKSM
MOVEI A,1 ;PUT BLOCK HEADER
PUSHJ P,@PUTB
MOVEI A,0
PUSHJ P,@PUTB
MOVE A,E
LSH A,1
SUB A,H
MOVE D,A
ADDI A,6
PUSHJ P,DWORD ;BYTE COUNT
MOVE A,H
PUSHJ P,DWORD ;LOAD ADDRESS
MOVE W,H
LSH W,-1
LSH D,-1
MOVNS D
HRL W,D ;NOW W IS AOBJN PTR TO WORDS TO DUMP
ADUMP5: MOVE A,11CORE(W)
PUSHJ P,DWORD
AOBJN W,ADUMP5
MOVN A,Q ;PUNCH CHECKSUM
PUSHJ P,@PUTB
PUSHJ P,FEED
MOVE W,E ;SET UP AOBJN PTR TO CORE YET TO BE DUMPED
SUBI E,11CORL
HRL W,E
JRST ADUMP1
DUMPJB: MOVEI Q,0
MOVEI A,1 ;JUMP BLOCK
PUSHJ P,@PUTB
MOVEI A,0
PUSHJ P,@PUTB
MOVEI A,6
PUSHJ P,@PUTB
MOVEI A,0
PUSHJ P,@PUTB
MOVE A,RUGSA
PUSHJ P,DWORD
MOVN A,Q
PUSHJ P,@PUTB
PUSHJ P,FEED
.CLOSE OUCH,
.BREAK 16,160000
FEED: MOVEI A,0 ;PUNCH 8 NULL FRAMES
PUSHJ P,.+1
PUSHJ P,.+1
PUSHJ P,.+1
JRST @PUTB
DWORD: LDB B,[101000,,A]
PUSHJ P,@PUTB
MOVE A,B
JRST @PUTB
;DUMP OUT AS A DL10 BOOTSTRAP PROGRAM
;THIS IS A STANDALONE PDP10 PROGRAM WHICH LOADS THE -11 ON DL10 PORT#0
TDUMP: .CALL OPENO
JRST FSERR
MOVSI A,-11CORL ;CHANGE -1,,0 TO 0
HRRZS 11CORE(A) ;SINCE WILL LOAD ALL -11 CORE
AOBJN A,.-1
HRROI A,[JRST 1] ;WRITE SBLK FILE
.IOT OUCH,A
MOVEI H,BOOTST
DMPLP: CAIL H,BOOTEN ;FIND NON-ZERO
JRST DMPEN
SKIPN (H)
AOJA H,DMPLP
MOVE J,H ;FIND 2 CONSECUTIVE ZEROS
HRLI J,-200 ;WITHIN NEXT 200 WORDS
ZERLP: SKIPE (J)
AOBJN J,ZERLP
JUMPGE J,DMPBLK
AOBJP J,DMPBLK
SKIPE (J)
JRST ZERLP
DMPBLK: SUBM H,J ;RH(J) := - # BLOCKS
HRL H,J
PUSH P,[DMPLP]
HRROI A,H
.IOT OUCH,A ;HEADER
MOVE Q,H
MOVE J,H
.IOT OUCH,H ;DATA
CKSLP: ROT Q,1
ADD Q,(J)
AOBJN J,CKSLP
HRROI A,Q
.IOT OUCH,A ;CHECKSUM
POPJ P,
DMPEN: HRROI A,[JUMPA BOOTER] ;START ADDR
.IOT OUCH,A
MOVSI H,-LSYMT
HRROI A,H
.IOT OUCH,A ;HEADER
MOVE Q,H
HRRI H,SYMT
MOVE J,H
.IOT OUCH,H ;DATA
PUSHJ P,CKSLP
HRROI A,[JUMPA BOOTER] ;START ADDR AGAIN
.IOT OUCH,A
.CLOSE OUCH,
.BREAK 16,160000
CONSTANTS
SYMT: SQUOZE 0,GLOBAL
-LSYMT,,0
SQUOZE 4,RUG
GORUG
SQUOZE 4,GO
BOOTER
SQUOZE 4,11CORE
11CORE
SQUOZE 4,SADR
SADR
LSYMT==.-SYMT
;THE PROGRAM THAT GOES ON THE MAGDMP TAPE
IFG .-4000,.ERR BLOAT
LOC 4000
BOOTST::
GORUG: MOVE A,RUGSA ;ENTER HERE TO START 11 IN RUG
MOVEM A,SADR ;ENTER BELOW TO START 11 IN IOELEV
BOOTER: CONI PAG,A ;FLUSH CACHE
TRZN A,600000
JRST BOOTAA
SWPUA
CONSZ APR,200000
JRST .-1
CONO PAG,(A)
BOOTAA: CONO DLC,400000 ;RESET DL10
MOVEI A,5000
SOJG A,.
CONO DLB,DL10AR
DATAO DLC,[40] ;STOP PDP11
DATAI DLC,A
TRNE A,20
JRST .-2
MOVSI A,2
SOJG A,.
CONO DLC,100020 ;PORT ENB
DATAO DLC,[20] ;START PDP11
DATAI DLC,A
TRNN A,20
JRST .-2
;PDP11 IS NOW RUNNING OUT OF DL10 AREA
IFLE 11CORL-40000,MOVSI Q,-11CORL ;LOAD ONLY 16K
.ELSE MOVSI Q,-40000
BOOTLP: MOVE A,11CORE(Q) ;TELL 11 BOOTSTRAP PROGRAM TO STORE ONE WORD
SKIPE FLAG
JRST .-1
MOVEM A,DAT
AOS FLAG
AOBJN Q,BOOTLP
SKIPE FLAG
JRST .-1
MOVEI A,000407 ;BR FROM 100004 TO 100024
MOVEM A,DL10AR+2
MOVEI A,25. ;ALLOW TIME FOR -11 TO GET STARTED
SOJG A,.
CONO DLC,400000 ;THEN, QUICK, TURN OFF PORT ENB WHILE IT'S IN INIT CODE
SKIPE -4000
JRST -4000 ;IF DDT IS PRESENT RETURN TO IT
JRST -400 ;ELSE RETURN TO MAGDMP
CONSTANTS
LOC 5000
DL10AR: JRST 4,.
005001 ;100002/ CLR %1
005727 ;100004/ TST #0
FLAG: 0 ;100006/ 0 => 11 READY FOR WORD, NON-0 => WORD GIVEN
001775 ;100010/ BEQ 100004
012721 ;100012/ MOV #0,(1)+
DAT: 0 ;100014/ VALUE TO BE STORED
005037 ;100016/ CLR @#FLAG
100006 ;100020/
000770 ;100022/ BR 100004
000137 ;100024/ JMP @#1
SADR: 1 ;100026/ THE START ADDRESS
LOC 6000
11CORE: BLOCK 11CORL
BOOTEN: -1 ;MIDAS CORING BUG
END GO